# -*- coding: UTF-8 -*-
"""
La connexion à la base de données.

Le code du CMS suppose que le résultat d'une requête SELECT est soumis aux
transformations suivantes :
    * une valeur booléenne devient un objet booléen Python
    * une date devient un objet Python datetime.date
    * une heure devient un objet Python datetime.time
    * un timestamp devient un objet Python datetime.datetime

Pour le moment, nous réalisons ces transformations en enregistrant auprès de psycopg
des transformations personnalisées. Si nous décidons plus tard d'utiliser un autre
module pour la base de données, il faudra nous assurer que ce module est capable
de réaliser les transformations appropriées, soit directement soit en offrant un
système de hooks nous permettant d'implémenter ces transformations.
"""

from django.conf.settings import DATABASE_ENGINE

try:
    dbmod = __import__('django.core.db.backends.%s' % DATABASE_ENGINE, '', '', [''])
except ImportError:
    # Le back-end pour la base de données est introuvable. On affiche un message d'erreur utile
    # qui dresse la liste de tous les back-ends pour la base de données.
    from django.core.exceptions import ImproperlyConfigured
    import os
    backend_dir = os.path.join(__path__[0], 'backends')
    available_backends = [f[:-3] for f in os.listdir(backend_dir) if f.endswith('.py') and not f.startswith('__init__')]
    available_backends.sort()
    raise ImproperlyConfigured, "Votre paramètre DATABASE_ENGINE, %r, est invalide. L'avez-vous entré correctement? Les options disponibles sont : %s" % \
        (DATABASE_ENGINE, ', '.join(map(repr, available_backends)))

DatabaseError = dbmod.DatabaseError
db = dbmod.DatabaseWrapper()
dictfetchone = dbmod.dictfetchone
dictfetchmany = dbmod.dictfetchmany
dictfetchall = dbmod.dictfetchall
dictfetchall = dbmod.dictfetchall
get_last_insert_id = dbmod.get_last_insert_id
get_date_extract_sql = dbmod.get_date_extract_sql
get_date_trunc_sql = dbmod.get_date_trunc_sql
OPERATOR_MAPPING = dbmod.OPERATOR_MAPPING
DATA_TYPES = dbmod.DATA_TYPES